#include "scImPing_sensor.h"

//Global variable
eeprom int GiReferensi;    //Referensi ketinggian air
eeprom int GiTinggiSensor; //Ketinggian sensor ping
int GiJarak;

//Extern variable
extern char *pImCmd;

unsigned int fImReadPing()
{
    unsigned int iCount = 0;
    DDR_PING = PIN_HIGH;//mengatur PIN I/O sebagai output
    PORT_PING = PIN_HIGH;//memberikan tanda ke PING untuk memancarkan ultrasonic burst
    delay_us(5);//waktu tunggu sebelum pengukuran min. 2us biasanya 5us
    PORT_PING = PIN_LOW;//menberikan sinyal low ke PING
    DDR_PING = PIN_HIGH;//arah PIN I/O diatur sebagai input
    PORT_PING = PIN_HIGH;//mengatur PIN I/O sebagai pill-up
    while (PIN_PING == PIN_LOW) {};//menunggu sinyal ECHO high
    while (PIN_PING == PIN_HIGH)
    {
        iCount++; //menghitung lebar sinyal ECHO high
    }
    GiJarak = (unsigned int)(((float)iCount)/25);//nilai pembagi dikalibrasi sampai sesuai dengan satuan yang diinginkan
    return(GiJarak);//mengembalikan jarak ke fungsi ultrasonic dengan tipe data unsigned int
}

int fImCheckRef()
{
    printf(" - Jarak benda : %i cm\r",GiJarak);
    printf(" - Referensi   : %i cm\r",GiReferensi);
    if (GiJarak > GiReferensi)
        return SENS_HIGHER;
    else                
        return SENS_LOWER;
}

int fImCsReadPing(char *cImPar)
{
    unsigned int iJarak;
    iJarak = fImReadPing();
    printf(" - Jarak benda : %i cm\r",iJarak);
    return 0;
}

int fImCsChangeRef(char *cImPar)
{
    pImCmd = strtok(cImPar,"\0");
    printf(" - Setting referensi : %s cm", pImCmd);
    GiReferensi = atoi(pImCmd);
    return 0;
}

int fImCsChangeHigh(char *cImPar)
{
    pImCmd = strtok(cImPar,"\0");
    printf(" - Setting ketinggian sensor : %s cm", pImCmd);
    GiTinggiSensor = atoi(pImCmd);
    return 0;
}

int fImCsShowSetting(char *cImPar)
{
    printf(" - Referensi ketinggian : %s cm", GiReferensi);
    printf(" - Ketinggia sensor     : %s cm", GiTinggiSensor);
    return 0;
}